package com.util.gzp;


import com.util.gzp.exception.CustomException;
import com.util.gzp.exception.ExceptionCode;
import lombok.Data;

import java.io.Serializable;


@Data
public class AjaxResponse implements Serializable {

    /**
     * 请求响应状态码
     */
    private int code;

    /**
     * 请求结果描述信息
     */
    private String msg;

    /**
     * 请求结果数据（通常用于查询操作）
     */
    private Object data;

    private AjaxResponse() {}

    /**
     * 请求出现异常时的响应数据封装
     *
     * @param e 异常信息
     * @return 返回响应
     */
    public static AjaxResponse error(CustomException e) {
        AjaxResponse resultBean = new AjaxResponse();
        resultBean.setCode(e.getCode());
        resultBean.setMsg(e.getInfo());
        return resultBean;
    }


    public static AjaxResponse error(ExceptionCode exceptionCode, String errorMessage, Object data) {
        AjaxResponse resultBean = new AjaxResponse();
        resultBean.setCode(exceptionCode.getCode());
        resultBean.setMsg(errorMessage);
        resultBean.setData(data);
        return resultBean;
    }

    /**
     * 请求出现异常时的响应数据封装
     */
    public static AjaxResponse error(ExceptionCode exceptionCode, String errorMessage) {
        AjaxResponse resultBean = new AjaxResponse();
        resultBean.setCode(exceptionCode.getCode());
        resultBean.setMsg(errorMessage);
        return resultBean;
    }

    /**
     * 请求成功的响应，不带查询数据（用于删除、修改、新增接口）
     */
    public static AjaxResponse success() {
        AjaxResponse ajaxResponse = new AjaxResponse();
        ajaxResponse.setCode(200);
        ajaxResponse.setMsg("请求响应成功!");
        return ajaxResponse;
    }

    /**
     * 请求成功的响应，带有查询数据（用于数据查询接口）
     */
    public static AjaxResponse success(Object obj) {
        AjaxResponse ajaxResponse = new AjaxResponse();
        ajaxResponse.setCode(200);
        ajaxResponse.setMsg("请求响应成功!");
        ajaxResponse.setData(obj);
        return ajaxResponse;
    }

    /**
     * 请求成功的响应，带有查询数据（用于数据查询接口）
     */
    public static AjaxResponse success(Object obj, String message) {
        AjaxResponse ajaxResponse = new AjaxResponse();
        ajaxResponse.setCode(200);
        ajaxResponse.setMsg(message);
        ajaxResponse.setData(obj);
        return ajaxResponse;
    }

    /**
     * 经过判定后请求失败的响应(适用于所有的判定)
     * @param message 写入请求失败的原因
     * @param code 如果失败写入状态码,(一般写入500)
     * @return
     */
    public static AjaxResponse success(String message, Integer code) {
        AjaxResponse ajaxResponse = new AjaxResponse();
        ajaxResponse.setCode(code);
        ajaxResponse.setMsg(message);
        return ajaxResponse;
    }


}
